#ifndef __MY_UART_H_
#define __MY_UART_H_

#include "Global.h"
#include "gpio.h"

#define _DEBUG_EN_                  (1)

#define UART_TX_ONLY                0
#define UART_RX_ONLY                1
#define UART_TX_AND_RX_EN           2


#define MY_UART0_TR_TYPE            UART_TX_AND_RX_EN

#define MY_UART0_TX_PORT_ID         3
#define MY_UART0_TX_PIN_ID         7              
#define MY_UART0_TX_GPIO_PORT       GPIO_PORT3//test_str_cat2(GPIO_PORT,UART0_TX_PORT_ID)//GPIO_PORT ## MY_UART0_TX_PORT_ID//
#define MY_UART0_TX_GPIO            GPIO_P37//STRCAT3(GPIO_P,UART0_TX_PORT_ID,(MY_UART0_TX_PIN_ID))
#define MY_UART0_TX_PIN             GPIO_Pin_7//STRCAT2(GPIO_Pin_,(MY_UART0_TX_PIN_ID))

#if _DEBUG_EN_
#define MY_UART0_RX_PORT_ID         2
#define MY_UART0_RX_PIN_ID          1           
#define MY_UART0_RX_GPIO_PORT       GPIO_PORT2//STRCAT2(GPIO_PORT,UART0_RX_PORT_ID)
#define MY_UART0_RX_GPIO            GPIO_P21//STRCAT3(GPIO_P,UART0_RX_PORT_ID,MY_UART0_RX_PIN_ID)
#define MY_UART0_RX_PIN             GPIO_Pin_1//STRCAT2(GPIO_Pin_,MY_UART0_RX_PIN_ID)
#else
#define MY_UART0_RX_PORT_ID         3
#define MY_UART0_RX_PIN_ID          6           
#define MY_UART0_RX_GPIO_PORT       GPIO_PORT3//STRCAT2(GPIO_PORT,UART0_RX_PORT_ID)
#define MY_UART0_RX_GPIO            GPIO_P36//STRCAT3(GPIO_P,UART0_RX_PORT_ID,MY_UART0_RX_PIN_ID)
#define MY_UART0_RX_PIN             GPIO_Pin_6//STRCAT2(GPIO_Pin_,MY_UART0_RX_PIN_ID)
#endif

#define MY_UART1_TR_TYPE            UART_TX_ONLY

#define _MY_UART1_TX_PORT_ID         1
#define _MY_UART1_TX_PIN_ID          3              
#define MY_UART1_TX_GPIO_PORT       GPIO_PORT1//STRCAT2(GPIO_PORT,_UART1_TX_PORT_ID)
#define MY_UART1_TX_GPIO            GPIO_P13////STRCAT3(GPIO_P,_UART1_TX_PORT_ID,_MY_UART1_TX_PIN_ID)
#define MY_UART1_TX_PIN             GPIO_Pin_3//STRCAT2(GPIO_Pin_,_MY_UART1_TX_PIN_ID)


#define _MY_UART1_RX_PORT_ID         2
#define _MY_UART1_RX_PIN_ID          2           
#define MY_UART1_RX_GPIO_PORT       GPIO_PORT2//STRCAT2(GPIO_PORT,_UART1_RX_PORT_ID)
#define MY_UART1_RX_GPIO            GPIO_P22//STRCAT3(GPIO_P,_UART1_RX_PORT_ID,_MY_UART1_RX_PIN_ID)
#define MY_UART1_RX_PIN             GPIO_Pin_2//STRCAT2(GPIO_Pin_,_MY_UART1_RX_PIN_ID)

enum
{
    _MyUart0=0,
    _MyUart1,
    _MaxUartComX,
};

typedef void (*pRxfunc)(uint8 data);

void MyUart0_HardWare_Config(uint32 bound);
void MyUart0_SendByte(uint8_t ch);
void MyUart0_RegisteRxHandler_Func(pRxfunc pfunc);
void uart0_interrupt_receive(void *msg);

void MyUart1_HardWare_Config(uint32 bound);
void MyUart1_SendByte(uint8_t ch);
void MyUart1_RegisteRxHandler_Func(pRxfunc pfunc);
void uart1_interrupt_receive(void *msg);

#endif
